package br.com.werp.regras.acesso.controle;

import br.com.werp.regras.acesso.integracao.FabricaDAO;
import br.com.werp.regras.acesso.integracao.UsuarioEmpresaSetorDAO;
import br.com.werp.regras.geral.Algoritimo;
import br.com.werp.regras.geral.Auditoria;
import br.com.werp.regras.geral.FabricaSubSistema;
import br.com.werp.regras.geral.util.BeanUtil;
import br.com.werp.regras.geral.util.Constantes;
import br.com.werp.regras.geral.vos.acesso.UsuarioDetalheFormVO;
import br.com.werp.regras.geral.vos.acesso.UsuarioEmpresaSetorVO;
import br.com.werp.regras.geral.vos.tabelas.Usuario;
import br.com.werp.regras.geral.vos.tabelas.Usuario_empresa;

import java.util.List;


/**
 * @author Sobreira
 * Criado em 04/10/2005
 */
public class ControleEmpresa {
    public List obterEmpresas(String usuarioLogin) throws Exception {
        UsuarioEmpresaSetorDAO empresaSetorDAO = FabricaDAO.getUsuarioEmpresaSetorDAO();

        return empresaSetorDAO.obterEmpresas(usuarioLogin);
    }

    public List obterEmpresaSetor(String usuarioLogin)
        throws Exception {
        UsuarioEmpresaSetorDAO empresaSetorDAO = FabricaDAO.getUsuarioEmpresaSetorDAO();
        UsuarioEmpresaSetorVO usuarioEmpresaVO = new UsuarioEmpresaSetorVO();
        usuarioEmpresaVO.setUsem_usuario(usuarioLogin);

        List list = empresaSetorDAO.obterEmpresaSetor(usuarioEmpresaVO);

        for (int i = 0; i < list.size(); i++) {
            usuarioEmpresaVO = (UsuarioEmpresaSetorVO) list.get(i);
            usuarioEmpresaVO.setId(i);
        }

        return list;
    }

    public void manterListEmpresaSetorUsuario(Object form, List list)
        throws Exception {
        Algoritimo algoritimo = FabricaSubSistema.getAlgoritimo();
        UsuarioDetalheFormVO usuarioDetalheFormVO = new UsuarioDetalheFormVO();
        BeanUtil.copiarVO(form, usuarioDetalheFormVO);

        if (Constantes.ADICIONAR.equals(usuarioDetalheFormVO.getEmpSetorOp())) {
            UsuarioEmpresaSetorVO usuarioEmpresaVO = new UsuarioEmpresaSetorVO();
            usuarioEmpresaVO.setEmpr_id(Integer.parseInt(
                    usuarioDetalheFormVO.getEmpresaId()));
            usuarioEmpresaVO.setStor_id(Integer.parseInt(
                    usuarioDetalheFormVO.getSetorId()));
            usuarioEmpresaVO.setUsem_usuario(usuarioDetalheFormVO.getUsur_login()
                                                                 .toLowerCase());
            usuarioEmpresaVO.setEmpr_descricao(usuarioDetalheFormVO.getEmpresaDisp());
            usuarioEmpresaVO.setStor_descricao(usuarioDetalheFormVO.getSetorDisp());
            algoritimo.criarIdVirtual(list, usuarioEmpresaVO);
        } else {
            algoritimo.removerIdVirtual(list, usuarioDetalheFormVO.getEmpresa());
        }
    }

    public void atualizarUsuarioEmpresa(Object key, String requisitor,
        Usuario usuario, List empresaSetor) throws Exception {
        UsuarioEmpresaSetorDAO usuarioEmpresaSetorDAO = FabricaDAO.getUsuarioEmpresaSetorDAO();

        Auditoria auditoria = FabricaSubSistema.getAuditoria();
        usuarioEmpresaSetorDAO.removerEmpresaSetor(key, usuario.getUsur_login());

        for (int i = 0; i < empresaSetor.size(); i++) {
            Usuario_empresa usuario_empresa = new Usuario_empresa();
            UsuarioEmpresaSetorVO usuarioEmpresaVO = (UsuarioEmpresaSetorVO) empresaSetor.get(i);
            usuario_empresa.setUsem_empresa(usuarioEmpresaVO.getEmpr_id());
            usuario_empresa.setUsem_setor(usuarioEmpresaVO.getStor_id());
            usuario_empresa.setUsem_usuario(usuarioEmpresaVO.getUsem_usuario());
            usuarioEmpresaSetorDAO.inserirUsuarioSetor(key, usuario_empresa);
            auditoria.auditarRecurso(key, requisitor, usuario_empresa,
                Auditoria.ALTERAR);
        }
    }
}
